perm filename IMPSER.LST[IP,NET] blob
sn#702331 filedate 1983-03-11 generic text, type T, neo UTF8
1) IMPSER.MA1[IP,NET] and 2) IMPSER.MAC[IP,NET] 3-11-83 12:39 pages 9,9
**** File 1) IMPSER.MA1[IP,NET]/9P/1L
1) SUBTTL INPUT INTERRUPT SERVICE ;⊗
1) COMMENT \
**** File 2) IMPSER.MAC[IP,NET]/9P/1L
2) SUBTTL INPUT INTERRUPT SERVICE
2) COMMENT \
***************
**** File 1) IMPSER.MA1[IP,NET]/12P/23L
1) HRLI T1,MIMBS2## ;MAKE IOWD POINTER TO REMAINING SPACE
1) AOJA T1,CPOPJ
**** File 2) IMPSER.MAC[IP,NET]/12P/23L
2) HRLI T1,-ImpBfs##+NBHLen+1 ;MAKE IOWD POINTER TO REMAINING SPACE
2) AOJA T1,CPOPJ
***************
**** File 1) IMPSER.MA1[IP,NET]/13P/26L
1) HRLI T1,MIMBS1## ;MAKE AN IOWD
1) POPJ P,
**** File 2) IMPSER.MAC[IP,NET]/13P/26L
2) HRLI T1,-ImpBfs##+NBHLen ;MAKE AN IOWD
2) POPJ P,
***************
**** File 1) IMPSER.MA1[IP,NET]/28P/1L
1) SUBTTL OUTPUT INTERRUPT SERVICE ;⊗
1) REPEAT 0,<
**** File 2) IMPSER.MAC[IP,NET]/28P/1L
2) SUBTTL OUTPUT INTERRUPT SERVICE
2) REPEAT 0,<
***************
**** File 1) IMPSER.MA1[IP,NET]/29P/1L
1) MESSAGE QUEUES: ;⊗
1) THE NCP HOST QUEUES ARE HANDLED ENTIRELY WITHIN THE NETWORK
**** File 2) IMPSER.MAC[IP,NET]/29P/1L
2) MESSAGE QUEUES:
2) THE NCP HOST QUEUES ARE HANDLED ENTIRELY WITHIN THE NETWORK
***************
**** File 1) IMPSER.MA1[IP,NET]/30P/22L
1) stopcd SonPPJ##,DEBUG,ZER ;++ zero entry returned.
1) >
**** File 2) IMPSER.MAC[IP,NET]/30P/22L
2) stopcd CPOPJ,DEBUG,ZER ;++ zero entry returned.
2) >
***************
**** File 1) IMPSER.MA1[IP,NET]/35P/23L
1) CAIL T2,MAXMES ; or too big for an IMP message?
1) ; (note: we are ignoring options here)
**** File 2) IMPSER.MAC[IP,NET]/35P/23L
2) ;[fudge] CAIL T2,MAXMES ; or too big for an IMP message?
2) cail t2,MaxMes-5 ;[fudge] cover for off by one (or more)
2) ;[fudge] arithmetic somewhere.
2) ; (note: we are ignoring options here)
***************
**** File 1) IMPSER.MA1[IP,NET]/35P/27L
1) sosle SndWnd(f) ; window size is one less. room here?
1) JSP P4,(P4) ; yes. STUFF THE DATA
**** File 2) IMPSER.MAC[IP,NET]/35P/29L
2) sosl SndWnd(f) ; window size is one less. room here?
2) JSP P4,(P4) ; yes. STUFF THE DATA
***************
**** File 1) IMPSER.MA1[IP,NET]/41P/1L
1) ;SUBROUTINE TO LINK AN ENTIRE MESSAGE FOR TRANSMISSION. ;⊗ OUTBYT OutBy0
1) IFWAITS<ENTRY OUTBYT>
**** File 2) IMPSER.MAC[IP,NET]/41P/1L
2) ; subroutine to decide if there's enough buffer space to send a message
2) OutPre::
2) pushj p,save2## ; get two Ps (P2 for the IDIVI)
2) move p1,OBfByt(f) ; get the byte count
2) ; add the number of bytes we should see in the leaders.
2) addi p1,<HTISiz/↑d8>+<IPLen##*4>+<TCPLen##*4>+NBfB36-1
2) idivi p1,NBfB36 ; how many buffer's do we need?
2) camg p1,BufNum## ; do we have that many?
2) pjrst cpopj1## ; yes!
2) popj p, ; no.
2) ;SUBROUTINE TO LINK AN ENTIRE MESSAGE FOR TRANSMISSION.
2) ; this routine assumes that enough buffers are available. call
2) ; OutPre to check with SCNOFFed before calling this routine.
2) IFWAITS<ENTRY OUTBYT>
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/10L
1) ; routine returns non-skip will DDB as it was on call (i.e., no
1) ; buffers are deleted, no counts are changed). skip return properly
1) ; deletes all buffers, etc.
1) ;
**** File 2) IMPSER.MAC[IP,NET]/42P/10L
2) ; routine STOPCDs.
2) ;
2) ; Important: enough buffers MUST be available for this routine before it
2) ; is called. if it tries to get a buffer and can't, it STOPCDs.
2) ; use OutPre to check.
2) ;
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/18L
1) ; ScnOff
1) ; pushj p,ImpMak
1) ; <insufficient buffer space>
1) ; <message is in transmission queue (and retransmission queue
1) ; if appropriate>
1) ;
**** File 2) IMPSER.MAC[IP,NET]/42P/20L
2) ; move t1,<1822 protocol number of calling protocol>
2) ; ScnOff
2) ; <insure that enough buffers are available by calling
2) ; OutPre>
2) ; pushj p,ImpMak
2) ; <always returns here>
2) ;
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/27L
1) ;
**** File 2) IMPSER.MAC[IP,NET]/42P/30L
2) ; T1 - calling protocol number for 1822.
2) ;
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/42L
1) ; returns non-skip if there is not enough buffer space to accomplish
1) ; this, else skip returns.
1) ;
**** File 2) IMPSER.MAC[IP,NET]/42P/46L
2) ; always returns non-skip, but may STOPCD if there are not enough
2) ; buffers for the conversion to 36 bits or if not enough free core
2) ; is available for a BIB.
2) ;
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/58L
1) popj p, ; error return, no buffer. let him
1) ; try again later.
1) move p1,ObfByt(F) ; get byte COUNT
**** File 2) IMPSER.MAC[IP,NET]/42P/63L
2) stopcd CPOPJ##,DEBUG,GBM, ;++ guarenteed buffer missing.
2) move p1,ObfByt(F) ; get byte COUNT
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/89L
1) move p1,OBfFst(f) ; get the real first
1) push p,f ; save our DDB
**** File 2) IMPSER.MAC[IP,NET]/42P/93L
2) setz p1, ; clear the first buffer pointer...
2) exch p1,OBfFst(f) ; ...and get the real first.
2) push p,f ; save our DDB
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/105L
1) ImpMa3: load. p1,NBHNxt,(p1) ; get next buffer
1) jrst ImpMa1 ; and deal with the new one
**** File 2) IMPSER.MAC[IP,NET]/42P/110L
2) ImpMa3: move t1,p1 ; get a copy
2) load. p1,NBHNxt,(p1) ; get next buffer
2) pushj p,BufRel## ; free the spent buffer.
2) jrst ImpMa1 ; and deal with the new one
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/128L
1) move t1,OBfFst(f) ; get a pointer to the first buffer
1) pushj p,RelBuf## ; release the whole chain now
1) ; that we're done with it.
1) SETZM OBFFST(F) ; remember there's nothing more here
1) SETZM OBFLST(F) ; now that we successfully got it
**** File 2) IMPSER.MAC[IP,NET]/42P/135L
2) MakOut: SETZM OBFFST(F) ; remember there's nothing more here
2) SETZM OBFLST(F) ; now that we successfully got it
***************
**** File 1) IMPSER.MA1[IP,NET]/42P/135L
1) pjrst cpopj1## ; all good. return happy
1) MakErr: pop p,f ; remember to get back our DDB
1) MakEr1: aos ImpIME## ; count ImpMak error
1) move t1,OBfFst+IMkDDB ; get the first in the chain we
1) ; were trying to build.
1) pjrst RelBuf## ; flush it and take bad return
1) ; subroutine to queue a TCP message for output from interrupt level. ;⊗ SndMsg
1) ; call with:
**** File 2) IMPSER.MAC[IP,NET]/42P/139L
2) popj p, ; and return.
2) MakErr: pop p,f ; remember to get back our DDB
2) stopcd .+1,DEBUG,MGB, ; missing guarenteed buffer
2) move t1,p1 ; point at remains of stream we
2) ; were translating.
2) pushj p,RelBuf## ; flush it
2) jrst MakEr2 ; and flush what we've created.
2) MakEr1: stopcd .+1,DEBUG,CGB, ;++ can't get BIB for ImpMak
2) MakEr2: move t1,OBfFst+IMkDDB ; get the first in the chain we
2) ; were trying to build.
2) pushj p,RelBuf## ; flush it.
2) jrst MakOut ; make sure to clear everything
2) ; subroutine to queue a TCP message for output from interrupt level.
2) ; call with:
***************
**** File 1) IMPSER.MA1[IP,NET]/43P/6L
1) pjrst cpopj1## ; yes. it will send the things we
1) ; want sent piggy-back. good return.
1) setzm ObfThs(f) ; no current buffer
**** File 2) IMPSER.MAC[IP,NET]/43P/6L
2) pjrst cpopj## ; yes. it will send the things we
2) ; want sent piggy-back.
2) pushj p,OutPre ; are there enough buffers to send it?
2) popj p, ; no. take error return.
2) setzm ObfThs(f) ; no current buffer
***************
**** File 1) IMPSER.MA1[IP,NET]/43P/14L
1) sos -1(p) ; preset for bad return
1) pop p,p3 ; get back P3
**** File 2) IMPSER.MAC[IP,NET]/43P/16L
2) pop p,p3 ; get back P3
***************
**** File 1) IMPSER.MA1[IP,NET]/48P/33L
1) PUSHJ P,IMPION## ;AND TURN INPUT BACK ON
1) jrst Q4Nop0 ; queue up 4 no-ops, interrupts already off.
**** File 2) IMPSER.MAC[IP,NET]/48P/33L
2) skipn IBfHlt ; waiting for a buffer to appear?
2) PUSHJ P,IMPION## ; no. TURN INPUT BACK ON
2) jrst Q4Nop0 ; queue up 4 no-ops, interrupts already off.
***************
**** File 1) IMPSER.MA1[IP,NET]/51P/45L
1) MITYN## ,, ITYTAB## ;PSEUDO TELETYPE 'ITY' LINKAGE TABLE
1) IMPM36##,, IMPBFT## ;BUFFER ALLOCATION TABLE
1) ZERTBN==.-ZERTAB
**** File 2) IMPSER.MAC[IP,NET]/51P/45L
2) -ITYN## ,, ITYTAB## ;PSEUDO TELETYPE 'ITY' LINKAGE TABLE
2) -IMPB36##,, IMPBFT## ;BUFFER ALLOCATION TABLE
2) TCPDCn##,, TCPDat## ; TCP data area.
2) ZERTBN==.-ZERTAB
***************
**** File 1) IMPSER.MA1[IP,NET]/52P/5L
1) OCLSE: PUSHJ P,OUT## ;SEND LAST BUFFER(S)
1) MOVSI S,IO ;SET FLAG
**** File 2) IMPSER.MAC[IP,NET]/52P/5L
2) OCLSE: pushj p,TCPCls## ; tell TCP about the close.
2) ; close does a TCP push.
2) PUSHJ P,OUT## ;SEND LAST BUFFER(S)
2) MOVSI S,IO ;SET FLAG
***************
**** File 1) IMPSER.MA1[IP,NET]/57P/21L
1) OUT05: ScnOff
1) PUSHJ P,OUTBYT ; send it out
1) jrst [ ; not enough room.
1) ScnOn ; interrupts back on
**** File 2) IMPSER.MAC[IP,NET]/57P/21L
2) OUT05: skipg DevCtr(f) ; is this the last byte in the
2) ; buffer?
2) pushj p,TCPPsh## ; yes. let TCP do push handling.
2) ScnOff
2) pushj p,OutPre ; predict it we will have enough
2) ; buffers for this message.
2) jrst [ ; not enough room.
2) ScnOn ; interrupts back on
***************
**** File 1) IMPSER.MA1[IP,NET]/57P/27L
1) ScnOn
**** File 2) IMPSER.MAC[IP,NET]/57P/31L
2) PUSHJ P,OUTBYT ; send it out
2) ScnOn
***************
**** File 1) IMPSER.MA1[IP,NET]/75P/11L
1) pushj p,TCPTCk## ; enough window for this?
1) jrst TTYRn1 ; no. try to send what's there.
1) SETZM OTTYC(F) ;CLEAR SAVED CHARACTER
**** File 2) IMPSER.MAC[IP,NET]/75P/11L
2) SETZM OTTYC(F) ;CLEAR SAVED CHARACTER
***************
**** File 1) IMPSER.MA1[IP,NET]/76P/29L
1) ImpTy1: PUSHJ P,OTBYTE ;TEST AND BUFFER IT
1) JRST IMPTY5 ;TOO MUCH (LH OF T2 TELLS WHY)
**** File 2) IMPSER.MAC[IP,NET]/76P/29L
2) ImpTy1: pushj p,TCPTCk## ; any window, and are we in a correct state?
2) jrst ImpTy5 ; no. try to send what's there.
2) PUSHJ P,OTBYTE ;TEST AND BUFFER IT
2) JRST IMPTY5 ;TOO MUCH (LH OF T2 TELLS WHY)
***************
**** File 1) IMPSER.MA1[IP,NET]/76P/45L
1) JRST XMTIMP## ;BACK FOR NEXT SCANNER INTERRUPT
1) ;HERE IF NO IMP CONNECTED TO THE LINE.
**** File 2) IMPSER.MAC[IP,NET]/76P/47L
2) JRST XMTIn1## ;BACK FOR NEXT SCANNER INTERRUPT, U set up.
2) ;HERE IF NO IMP CONNECTED TO THE LINE.
***************
**** File 1) IMPSER.MA1[IP,NET]/76P/50L
1) JRST XMTIMP## ;AND THROW OUT THE CHAR
1) ;HERE IF BIT OR BUFFER SHORTAGE
1) IMPTY5: ANDI T1,377 ;ENSURE JUST 1 CHAR HERE
1) HRL T1,T2 ;SET FLAG WITH CHARACTER
1) TRO T1,1B18 ;CHARACTER NEVER NULL
**** File 2) IMPSER.MAC[IP,NET]/76P/52L
2) JRST XMTIn1## ;AND THROW OUT THE CHAR, get next.
2) ;HERE IF BIT OR BUFFER SHORTAGE
2) IMPTY5: ANDI T1,377 ;ENSURE JUST 1 CHAR HERE
2) HRL T1,T2 ;SET FLAG WITH CHARACTER (flag unused)
2) TRO T1,1B18 ;CHARACTER NEVER NULL
***************
**** File 1) IMPSER.MA1[IP,NET]/76P/70L
1) push p,f ; save DDB
1) LDB f,LDPLNO## ;GET LINE NUMBER
1) move F,ITYOFS##(f) ; get DDB of imp
1) pushj p,TCPTCk## ; enough window?
1) pjrst fpopj## ; no. don't try to send
1) pop p,f ; restore old F so we can save
1) ; it again later.
1) SKIPGE LDBDCH##(U) ;LINE IDLE?
**** File 2) IMPSER.MAC[IP,NET]/76P/72L
2) SKIPGE LDBDCH##(U) ;LINE IDLE?
***************
**** File 1) IMPSER.MA1[IP,NET]/77P/34L
1) ifn FtChck,< ; take check sum
**** File 2) IMPSER.MAC[IP,NET]/77P/34L
2) pushj p,OutPre ; are there enough buffers available
2) ; to send this message?
2) pjrst sonppj## ; no. don't send it.
2) ; note: user must type something for
2) ; this to revive. should be fixed.
2) ifn FtChck,< ; take check sum
***************
**** File 1) IMPSER.MA1[IP,NET]/77P/40L
1) aos ImpOOB## ; count out of buffers error
1) ifn FtChck,< ; take check sum
**** File 2) IMPSER.MAC[IP,NET]/77P/45L
2) ifn FtChck,< ; take check sum
***************
**** File 1) IMPSER.MA1[IP,NET]/87P/13L
1) PUSHJ P,SETNEC ;OKAY, STOP ECHO (AND MAYBE PASS DOWN)
1) HLRZ F,(P) ;GET IMPDDB BACK
**** File 2) IMPSER.MAC[IP,NET]/87P/13L
2) PUSHJ P,SETNEC## ;OKAY, STOP ECHO (AND MAYBE PASS DOWN)
2) HLRZ F,(P) ;GET IMPDDB BACK
***************
**** File 1) IMPSER.MA1[IP,NET]/87P/21L
1) PUSHJ P,SETECH ;BACK TO ECHO MODE
1) HLRZ F,(P) ;BACK TO IMP
**** File 2) IMPSER.MAC[IP,NET]/87P/21L
2) PUSHJ P,SETECH## ;BACK TO ECHO MODE
2) HLRZ F,(P) ;BACK TO IMP
***************
**** File 1) IMPSER.MA1[IP,NET]/95P/11L
1) MOVSI U,MITYN## ;FIND UNUSED ITY
1) ITYGE1: SKIPE ITYTAB(U) ;THIS ONE?
**** File 2) IMPSER.MAC[IP,NET]/95P/11L
2) MOVSI U,-ITYN## ;FIND UNUSED ITY
2) ITYGE1: SKIPE ITYTAB(U) ;THIS ONE?
***************
**** File 1) IMPSER.MA1[IP,NET]/96P/17L
1) PUSHJ P,TTYOFF## ;SIGNAL DISCONNECT
1) ITYRE2: POP P,U ;RESTORE U
**** File 2) IMPSER.MAC[IP,NET]/96P/17L
2) PUSHJ P,DscClr## ;SIGNAL DISCONNECT and clear down LDB
2) ITYRE2: POP P,U ;RESTORE U
***************
**** File 1) IMPSER.MA1[IP,NET]/97P/1L
1) ;HOST TABLE: ;⊗
1) ;ENTRY FORMAT: ;[96bit]
**** File 2) IMPSER.MAC[IP,NET]/97P/1L
2) ;HOST TABLE:
2) ;ENTRY FORMAT: ;[96bit]
***************
**** File 1) IMPSER.MA1[IP,NET]/110P/5L
1) move p1,RetrnQ(f) ; get our retranmission queue
1) FixLup: jumpe p1,cpopj## ; no more in retranmission queue
1) load. p2,BIBMes,(p1) ; point at the first buffer in
**** File 2) IMPSER.MAC[IP,NET]/110P/5L
2) scnoff ; don't allow distractions
2) move p1,RetrnQ(f) ; get our retranmission queue
2) FixLup: jumpe p1,sonppj## ; no more in retranmission queue
2) load. p2,BIBMes,(p1) ; point at the first buffer in
***************
**** File 1) IMPSER.MA1[IP,NET]/112P/44L
1) IMkDDB=.-ImpTop ; hypothetic start of this DDB
1) block ImpBot-ImpTop+1 ; allocate words needed
1) ;TEMPORARY STORAGE
**** File 2) IMPSER.MAC[IP,NET]/112P/44L
2) IMkDDB=.-OBfTop ; hypothetic start of this DDB
2) block OBfBot-OBfTop+1 ; allocate words needed
2) ;TEMPORARY STORAGE
***************